home *** CD-ROM | disk | FTP | other *** search
- /*
- * InstList.cpp
- *
- * MIDAS Module Player for Windows NT Instrument List View
- *
- * $Id: InstList.cpp 1.4 1997/01/14 17:42:08 pekangas Exp $
- *
- * Copyright 1996 Petteri Kangaslampi
- */
-
- #define WIN32_LEAN_AND_MEAN
- #include <string.h>
- #include <windows.h>
- #include <stdio.h>
- #include "midasdll.h"
- #include "MidpView.h"
- #include "MidpNT.h"
- #include "MidpModeless.h"
- #include "InstList.h"
- #include "MidpRes.h"
- #include "ViewList.h"
-
-
- LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam,
- LPARAM lparam);
-
-
-
- InstListView::InstListView(void)
- {
- static WNDCLASS wc;
-
- /* Set up and register window class for the view window: */
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = WindowProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = sizeof(DWORD);
- wc.hInstance = instance;
- wc.hIcon = LoadIcon(instance, "GenericIcon");
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hbrBackground = NULL;
- wc.lpszMenuName = NULL;
- wc.lpszClassName = "midpInstList";
- if ( RegisterClass(&wc) == 0 )
- Panic("InstListView::InstListView:: RegisterClass() failed");
-
- window = NULL;
- }
-
-
- InstListView::~InstListView(void)
- {
- if ( window != NULL )
- {
- delete window;
- window = NULL;
- }
- }
-
-
- char *InstListView::Name(void)
- {
- return "InstListView";
- }
-
-
- char *InstListView::Description(void)
- {
- return "Instrument List";
- }
-
-
- midpViewWindow *InstListView::CreateViewWindow(Registry *registry)
- {
- if ( window != NULL )
- return (midpViewWindow*) window;
- window = new InstListWindow(0, this, registry);
- return (midpViewWindow*) window;
- }
-
-
- void InstListView::DestroyViewWindow(midpViewWindow *_window)
- {
- if ( _window != window )
- Panic("InstListView::DestroyWindow: _window != window");
-
- delete window;
- window = NULL;
- }
-
-
-
-
- InstListWindow::InstListWindow(int instanceNumber, midpView *view,
- Registry *registry) :
- midpViewWindow(instanceNumber, view, registry)
- {
- HWND parent = NULL;
-
- if ( viewsChildren )
- parent = mainWinHandle;
-
- instanceNumber = instanceNumber;
-
- hwnd = CreateWindow(
- "midpInstList", /* class */
- "Instrument List", /* caption */
- WS_POPUPWINDOW | WS_CAPTION | WS_THICKFRAME | WS_VISIBLE, /* style */
- // 100, 100, 400, 200,
- startX, /* init. x pos */
- startY, /* init. y pos */
- startWidth, /* init. x size */
- startHeight, /* init. y size */
- // mainWinHandle, /* parent window */
- parent,
- NULL, /* menu handle */
- instance, /* program handle */
- (LPVOID) this /* create parms */
- );
-
- // ShowWindow(hwnd, SW_SHOWDEFAULT);
- // UpdateWindow(hwnd);
-
- viewWindowList.AddWindow(this);
- }
-
-
-
- InstListWindow::~InstListWindow(void)
- {
- viewWindowList.RemoveWindow(this);
- DestroyWindow(hwnd);
- }
-
-
-
- LRESULT CALLBACK InstListWindow::ClassWindowProc(HWND hwnd, UINT message,
- WPARAM wparam, LPARAM lparam)
- {
- INT tabstop = 4;
- hwnd = hwnd;
- wparam = wparam;
- lparam = lparam;
-
- switch ( message )
- {
- case WM_CREATE:
- listWinHandle = CreateWindow(
- "LISTBOX",
- NULL,
- WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL |
- LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT,
- 0, 0, 0, 0, /* set size in WM_SIZE message */
- hwnd, /* parent window */
- NULL, /* edit control ID */
- instance,
- NULL); /* no window creation data */
-
- SendMessage(listWinHandle, LB_SETHORIZONTALEXTENT, 40, 0);
- SendMessage(listWinHandle, LB_SETTABSTOPS, 1, (LPARAM) &tabstop);
-
- UpdateList();
- return 0;
-
- case WM_SIZE:
- /* Make the list box the size of the window's client area: */
- MoveWindow(listWinHandle,
- 0, 0, /* starting x- and y-coordinates */
- LOWORD(lparam), /* width of client area */
- HIWORD(lparam), /* height of client area */
- TRUE); /* repaint window */
- //SetBkMode
- return 0;
-
- case WM_CLOSE:
- DestroyWindow(listWinHandle);
- ownerView->DestroyViewWindow(this);
- return 0;
-
- case MIDPMSG_SONGCHANGED:
- UpdateList();
- return 0;
-
- default:
- return(DefWindowProc(hwnd, message, wparam, lparam));
- }
- }
-
-
- void InstListWindow::UpdateList(void)
- {
- unsigned i;
- char str[128];
- char name[64];
- HFONT oldFont, font;
- HDC hdc;
- SIZE size;
- int extent = 0;
- MIDASmoduleInfo moduleInfo;
- MIDASinstrumentInfo instrumentInfo;
-
- font = (HFONT) SendMessage(listWinHandle, WM_GETFONT, 0, 0);
- hdc = GetDC(listWinHandle);
- oldFont = SelectObject(hdc, font);
-
- SendMessage(listWinHandle, LB_RESETCONTENT, 0, 0);
- if ( module != NULL )
- {
- MIDASgetModuleInfo(module, &moduleInfo);
-
- for ( i = 0; i < moduleInfo.numInstruments; i++ )
- {
- MIDASgetInstrumentInfo(module, i, &instrumentInfo);
- OemToChar(instrumentInfo.instName, name);
- sprintf(str, "%02X\t%s", i+1, name);
- SendMessage(listWinHandle, LB_ADDSTRING, 0, (LPARAM) str);
- if ( !GetTextExtentPoint32(hdc, str, strlen(str), &size) )
- {
- sprintf(str, "ListViewWindow::UpdateList: GetTextExtentPoint"
- "32 fails (%i)", GetLastError());
- Panic(str);
- }
- if ( size.cx > extent )
- extent = size.cx;
- }
- }
-
- SendMessage(listWinHandle, LB_SETHORIZONTALEXTENT, extent, 0);
-
- SelectObject(hdc, oldFont);
- }
-
-
- static LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam,
- LPARAM lparam)
- {
- InstListWindow *window;
- LPCREATESTRUCT cs;
-
- if ( message == WM_NCCREATE )
- {
- cs = (LPCREATESTRUCT) lparam;
- window = (InstListWindow*) cs->lpCreateParams;
- SetWindowLong(hwnd, GWL_USERDATA, (LONG) window);
- }
-
- window = (InstListWindow*) GetWindowLong(hwnd, GWL_USERDATA);
-
- return window->ClassWindowProc(hwnd, message, wparam, lparam);
- }
-
-
- /*
- * $Log: InstList.cpp $
- * Revision 1.4 1997/01/14 17:42:08 pekangas
- * Changed to use MIDAS DLL API
- *
- * Revision 1.3 1996/08/13 20:23:40 pekangas
- * #included stdio.h as MIDAS rawfile.h no longer does that
- *
- * Revision 1.2 1996/07/16 19:25:13 pekangas
- * Removed Visual C warnings, Added RCS keywords, converted to LFs
- *
- */